package com.docparser.processor;

/**
 * 处理基本文本内容和数学符号。
 */
public class TextContentProcessor extends BaseProcessor {
    /**
     * 处理文本内容，包括数学符号和特殊字符。
     */
    public static void process(String text, StringBuilder formula) {
        if (text == null || text.trim().isEmpty()) return;
        
        text = text.trim();
        
        // 预处理文本
        text = preprocessText(text);
        
        // 处理特殊字符
        switch (text) {
            case "π":
                formula.append("\\pi ");
                break;
            case "∞":
                formula.append("\\infty ");
                break;
            case "…":
            case "⋯":
            case "dots":
                formula.append("\\cdots ");
                break;
            case "×":
            case "·":
                formula.append("\\cdot ");
                break;
            case "±":
                formula.append("\\pm ");
                break;
            case "∓":
                formula.append("\\mp ");
                break;
            case "+":
            case "=":
            case "<":
            case ">":
                formula.append(" ").append(text).append(" ");
                break;
            default:
                if (text.contains("-")) {
                    processMinusExpression(text, formula);
                } else if (text.matches("[a-zA-Z]{2,}")) {
                    processLetterSequence(text, formula);
                } else {
                    formula.append(text);
                }
        }
    }

    /**
     * 处理连续字母序列。
     */
    private static void processLetterSequence(String text, StringBuilder formula) {
        if (text.startsWith("nn-")) {
            formula.append("n(n-").append(text.substring(3)).append(")");
        } else {
            formula.append(text);
        }
    }

    /**
     * 处理包含减号的表达式。
     */
    private static void processMinusExpression(String text, StringBuilder formula) {
        if (text.matches("[a-zA-Z]+-\\d+")) {
            String[] parts = text.split("-");
            formula.append("(").append(parts[0]).append("-").append(parts[1]).append(")");
        } else {
            formula.append(text);
        }
    }

    /**
     * 预处理文本内容。
     */
    private static String preprocessText(String text) {
        return text
            // 处理花括号
            .replace("\\{", "{")
            .replace("\\}", "}")
            // 处理反斜杠
            .replace("\\\\", "\\")
            // 处理减号
            .replace("−", "-")
            // 移除多余的空格
            .replaceAll("\\s+", " ")
            .trim();
    }
}
